home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SPACE 2
/
SPACE - Library 2 - Volume 1.iso
/
music
/
13
/
utility
/
rtxdemo.c
< prev
next >
Wrap
Text File
|
1986-05-12
|
6KB
|
222 lines
/************************************************************************/
/* */
/* RRRRRRRRR TTTTTTTTTTTTTTT XXX XXX */
/* RRR RRR TTT XXX XXX */
/* RRR RRR TTT XXX XXX */
/* RRRRRRRRR TTT XXX */
/* RRR RRR TTT XXX XXX */
/* RRR RRR TTT XXX XXX */
/* RRR RRR TTT XXX XXX */
/* */
/* MICRO RTX - Atari ST Multitasking Operating System Kernel */
/* */
/* (c) Copyright 1986 by David Beckemeyer */
/* */
/* */
/* This short demonstaration program demonstates some of the */
/* multitasking capabilities of the Atari ST computer. */
/* */
/* This is a sample of a MICRO RTX multitasking application. */
/* As you can see, MICRO RTX applications can be as simple as you */
/* want. The standard GEMDOS functions operate as usual, with */
/* automatic multitasking. */
/* */
/* This MICRO RTX application is a simple "shell" that shows */
/* how to use the kernel to get automatic multitasking. */
/* */
/* When run, the shell will prompt with a "*". It accepts the */
/* following one letter commands: */
/* */
/* e - execute a program file */
/* h - create background CPU hog */
/* l - list a file on the screen */
/* m - spool a file to the modem (RS-232) */
/* p - spool a file to the printer */
/* s - show processes */
/* x - exit demo program */
/* */
/* The e, l, m, and p commands prompt for a file name. In each */
/* case the complete path of the file (including the extension) */
/* must be given. */
/* */
/* The e command will attept to execute the given program file. */
/* This must not be a GEM program with this demo because the */
/* mouse and screen are not set up for GEM. */
/* */
/* The l, m, and p commands cannot be used concurrently. */
/* This is because the demo uses the Unix style standard I/O */
/* library for opening the files (from GEMLIB) and since this */
/* code from DRI is not reentrant, the sharing of the GEMLIB */
/* code doesn't work. This could be fixed by either re-writing */
/* the standard I/O routines, or by using the GEMDOS style */
/* calls (from osbind.h) Fopen, Fread, etc. We are working on */
/* our improved version of the Unix standard I/O library. */
/* */
/* Keep in mind that standard "fopen", "fclose" calls work */
/* normally for progams that always used them. The problem */
/* only comes about when you are actually sharing the data */
/* & code segments, like this demo does. The sub-processes */
/* created here all share one copy of code from "GEMLIB" made */
/* at link time. When individual programs are run as a */
/* single process, they each have their own copy of GEMLIB */
/* so everything works fine. Got it? */
/* */
/* The h command just soaks up CPU time to demonstrate the */
/* fantastic CPU horsepower of the ST. */
/* */
/* With this MICRO RTX demo, you can run up to three background */
/* processes. This is a configuration limitation only. You */
/* can configure MICRO RTX for however many processes you want. */
/* */
/************************************************************************/
#include <stdio.h>
#include <osbind.h>
char filename[64];
main()
{
char buf[80];
char *p;
int i, delta;
char c;
int modem(), hog(), print();
rtx_install();
delta = p_priority(0L, 0) - 100;
p_priority(0L, -delta);
printf("MICRO RTX - Atari ST Multitasking Operating System Kernel\n");
printf("(c) Copyright 1986 - David Beckemeyer\n\n");
printf("This program is Free! It is a simple application program\n");
printf("that uses the MICRO RTX multitasking kernel to demonstrate\n");
printf("a few of the multitasking capabilities of the ST.\n\n");
printf("It may be freely distributed, provided all the introductory\n");
printf("messages remain intact. MICRO RTX is available from:\n\n");
printf("\tBeckemeyer Development Tools\n");
printf("\t592 Jean Street #304\n");
printf("\tOakland, CA 94610\n");
printf("\t(415) 658-5318\n\n");
do {
getline(buf, "* ");
switch (buf[0]) {
case 'e':
getline(buf, "Exec file: ");
Pexec(0, buf, "", "");
break;
case 'm':
getline(filename, "File: ");
p_create(100, 20, modem, 0, 0L);
break;
case 'h':
p_create(100, 20, hog, 0, 0L);
break;
case 'p':
getline(filename, "File: ");
p_create(100, 20, print, 0, 0L);
break;
case 's':
printf("Processes:\n----------\n\n");
showpall();
break;
case 'l':
getline(buf, "File: ");
list(buf);
break;
case '\0':
case 'x':
break;
case '?':
printf("e - exec a program (foreground)\n");
printf("h - create background CPU hog\n");
printf("l - dump file to screen (foreground)\n");
printf("m - spool file to RS-232\n");
printf("p - spool file to printer\n");
printf("s - show processes\n");
printf("x - exit\n");
break;
default:
printf("Unknown command - ? lists commands\n");
break;
}
} while (buf[0] != 'x');
rtx_remove();
printf("\nBye Byte\n");
}
modem()
{
char c;
FILE *fd;
if ((fd = fopen(filename, "r")) != 0) {
while ((c = fgetc(fd)) != EOF) {
Cauxout(c);
if (c == '\n')
Cauxout('\015');
}
fclose(fd);
}
}
list(file)
char *file;
{
char c;
FILE *fd;
if ((fd = fopen(file, "r")) != 0) {
while ((c = fgetc(fd)) != EOF) {
putchar(c);
}
fclose(fd);
}
else
printf("%s does not exist\n", file);
}
hog()
{
for (;;)
;
}
print()
{
char c;
FILE *fd;
if ((fd = fopen(filename, "r")) != 0) {
while ((c = fgetc(fd)) != EOF) {
Cprnout(c);
if (c == '\n')
Cprnout('\015');
}
fclose(fd);
}
}
getline(buf, p)
char *buf;
char *p;
{
Cconws(p);
buf[0] = 78;
Cconrs(buf);
buf[2+buf[1]] = '\0';
putchar('\n');
strcpy(buf, buf+2);
}
əəəəəəəəəə